package com.panda.takeaway.service;

import com.panda.takeaway.entity.bo.LoginBo;
import com.panda.takeaway.entity.bo.PwdBo;
import com.panda.takeaway.entity.bo.UserLoginBo;
import com.panda.takeaway.entity.dto.CommonResult;
import com.panda.takeaway.entity.po.Address;
import com.panda.takeaway.entity.po.User;
import com.panda.takeaway.entity.vo.UserInfoVo;

import java.util.List;
import java.util.Map;

/**
 * @author John
 * @create 2021-08-06-14:52
 */
public interface UserService {
    /**
     * 登陆接口
     *
     * @param loginBo 包含账号密码的包装类
     * @return 登陆结果的BO
     */
    CommonResult<UserLoginBo> login(LoginBo loginBo);

    /**
     * 通过用户id查询用户信息
     *
     * @param userId 用户id
     * @return 返回user对象
     */
    CommonResult<UserInfoVo> queryInfoById(Long userId);

    /**
     * 通过用户id来修改个人信息
     *
     * @param userInfoVo 视图层对象
     * @return 数据发生改变的行数
     */
    CommonResult<?> updateInfoById(UserInfoVo userInfoVo);

    /**
     * 注册新用户
     *
     * @param user 新的user
     * @return 数据发生改变的行数
     */
    CommonResult<?> register(User user);

    /**
     * 添加新的地址
     *
     * @param address 新地址对象
     * @return 返回结果集
     */
    CommonResult<?> addAddress(Address address);

    /**
     * 通过用户id查询所有的收餐地址
     *
     * @param userId 用户的id
     * @return 返回List集合
     */
    CommonResult<List<Address>> queryAddressByUserId(Long userId);

    /**
     * 通过id删除一个地址
     *
     * @param id 地址的id
     * @return 没有数据返回
     */
    CommonResult<?> deleteAddressById(Long id);

    /**
     * 通过id修改为默认地址
     *
     * @param map userId-用户id，addressId-地址id
     * @return 没有数据返回
     */
    CommonResult<?> updateAddressToDefaultById(Map<String, Long> map);

    /**
     * 修改密码
     *
     * @param pwdBo 包装新旧密码的对象
     * @return 返回修改结果
     */
    CommonResult<?> updatePassword(PwdBo pwdBo);

    /**
     * 新商家入驻平台
     *
     * @param loginBo 包含账号密码的包装类,用于进行身份验证
     * @return 返回入驻结果
     */
    CommonResult<?> addMerchant(LoginBo loginBo);
}
